There are a wide variety of ways of storing data persistently, particularly with cloud-based systems. These include file systems, relational databases (e.g., DB2, MySQL, SQL Server), and NoSQL systems.
The emergence and popularity of in-memory NoSQL databases (often interpreted as “not only SQL” where SQL refers to structured query language) can be attributed to the flexible data model and the huge performance gain they provide as compared with a traditional relational database management system (RDBMS). In particular, NoSQL databases adopt flexible, schema-less data models, which ease application usage and fit well to the needs of many applications. In addition, by relaxing the stringent design properties required by traditional RDBMS, NoSQL databases can often benefit from a less sophisticated design architecture, which yields much greater performance as the database scales. As a result, open-source and proprietary NoSQL data stores such as Memcached, Redis, Voldemort, MongoDB and Couchbase have gained huge grounds in terms of market adoption in recent years.
Redis is a memory-based key-value database, which is commonly used for constructing high-performance and extensible distributed application systems that include one or more servers (a “cluster”) and multiple clients. By using Redis with an application server, the application server can be connected to a service node in the Redis server cluster through the client to read or write data. The client is connected to a particular service node in the server cluster according to pre-defined configuration information at the application server.
Detecting and managing failovers and replication events is a critical component of operating such an environment. For example, use of a cluster of Redis databases as “cache servers” can increase the availability of, and speed of access to, information stored in the database by providing access to frequently used data without having to access a persistent data store. In such a replicated distributed database there are often copies of the same information stored on servers that are not directly connected to one another, but which may be connected by one or more switches, dedicated lines, etc. Managing these relationships in real-time without sacrificing performance introduces certain architectural and operational challenges.